package Pacote1;

import grails.test.*
import les.*

class CrudIntegrantesTests extends functionaltestplugin.FunctionalTestCase {
	
	// A unica informacao obrigatoria do integrante eh seu nome. Ao criar
	// um integrante, o usuario eh levado para a pagina de Show daquele
	// integrante criado
	void testApenasNome() {
		get ("/usuario/login")
		
		form() {
			email = "encontrosejc@gmail.com"
			senha = "123456"
			click "entrar"
		}
		
		
		redirectEnabled = false
		get ("/integrante/create")
		
		form() {
			nome = "teste"
			click "create"
		}
		
		assertRedirectUrlContains "/integrante/show"
		followRedirect()
		redirectEnabled = true

		assertContentContains "Integrante criado(a) com sucesso"
        assertContentContainsStrict "<td valign=\"top\" class=\"name\">Nome</td>"
		assertContentContainsStrict "<td valign=\"top\" class=\"value\">teste</td>"
	}
	
	// Como nome eh informacao obrigatoria, o sistema mostra mensagem de erro
	// se nao colocar essa informacao, e marca a celula do campo nome com a 
	// classe "value errors"
	void testSemNome() {
		get ("/usuario/login")
		
		form() {
			email = "encontrosejc@gmail.com"
			senha = "123456"
			click "entrar"
		}
		
		get ("/integrante/create")
		
		form() {
			apelido = "teste"
			rua = "teste"
			numero = "teste"
			click "create"
		}
		
		assertContentContains "O campo nome n&atilde;o pode ficar em branco";
		assertContentContains '<td valign="top" class="value errors"><input type="text" name="nome" value="" size="60" id="nome" /></td>';
	}
	
	// Testando formatos inadequados.
	// email precisa ter formato de e-mail, e cep precisa ter formato XX.XXX-XXX
	void testFormatosInadequados() {
		get ("/usuario/login")
		
		form() {
			email = "encontrosejc@gmail.com"
			senha = "123456"
			click "entrar"
		}
		
		get ("/integrante/create")
		
		form() {
			nome = "teste email"
			email = "teste.com"
			click "create"
		}
		
		assertContentContains 'O campo email n&atilde;o &eacute; um endere&ccedil;o de email v&aacute;lido.'
		assertContentContains '<td valign="top" class="value errors"><input type="text" name="email" value="teste.com" id="email" /></td>';
		
		form() {
			nome = "teste email"
			email = "teste@gmail.com"
			click "create"
		}
		
		assertContentContains "Integrante criado(a) com sucesso"
		assertContentContains '<td valign="top" class="name">E-mail</td><td valign="top" class="value">teste@gmail.com</td>';
		
		get ("/integrante/create")
		
		form() {
			nome = "teste cep"
			cep = "58414-260"
			click "create"
		}
		
		assertContentContains 'O campo cep n&atilde;o atende ao padr&atilde;o definido [0-9]{2}.[0-9]{3}-[0-9]{3}';
		assertContentContains '<td valign="top" class="value errors"><input type="text" name="cep" value="58414-260" id="cep" /></td>';
		
		form() {
			nome = "teste cep"
			cep = "58.414-260"
			click "create"
		}
		
		assertContentContains "Integrante criado(a) com sucesso"
		assertContentContains '<td valign="top" class="name">CEP</td><td valign="top" class="value">58.414-260</td>';
	}
	
}
